package model;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import controller.ClienteController;

import Utils.StringUtil;
import model.bean.CardapioBean;
import model.bean.ClienteBean;
import model.bean.EventoBean;

public class EventoDAO {
	
	// dai tipo, tem o metodo no DAo chamado getAllClientes que retorna um array com todos os clientes do banco
	// pra fazer a pesquisa é só modificar esse metodo passando os parametros
	// ai checa se ta vazio ou nao e tals
	// se nao tiver vazio tu manda pro select
	
	public static boolean insertEvento(EventoBean evento){
		Connection conn =  new MysqlConnect().connect();
		String sql = "INSERT INTO EVENTO (IDCLIENTE, QTDPESSOAS, DTEVENTO, OBS, IDCARDAPIO, SITUACAO, PERIODO, " +
					 "ENDERECO, CIDADE, CEP, COMPLEMENTO, NOME) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
		try {
			PreparedStatement stmt = conn.prepareStatement(sql);
			stmt.setInt(1, evento.getCliente().getIdCliente());
			stmt.setInt(2, evento.getQtdPessoas());
			stmt.setDate(3, StringUtil.calendarToSqlDate(evento.getData()));
			stmt.setString(4, evento.getObs());
			stmt.setInt(5, evento.getCardapio().getIdCardapio());
			stmt.setString(6, evento.getStatus());
			stmt.setString(7, evento.getPeriodo());
			stmt.setString(8, evento.getEndereco());
			stmt.setString(9, evento.getCidade());
			stmt.setString(10, evento.getCep());
			stmt.setString(11, evento.getComplemento());
			stmt.setString(12, evento.getNome());
			stmt.executeUpdate();
			conn.close();
			return true;
			
		} catch (SQLException e) {
			System.out.println("Could not perform statement");
			e.printStackTrace();
			return false;
		}
	}
	public static List<EventoBean> getEventosByDate(Calendar data){
		MysqlConnect mysql = new MysqlConnect();
		Date dataString = StringUtil.calendarToSqlDate(data);
		ResultSet rs = mysql.select("EVENTO", "", "dtevento = " + dataString, "", "");
		List<EventoBean> eventos = new ArrayList<EventoBean>();
		try {
			while(rs.next()){
				String nome = rs.getString("nome");
				String endereco = rs.getString("endereco");
				String cep = rs.getString("cep");
				String cidade = rs.getString("cidade");
				String status = rs.getString("situacao");
				String periodo = rs.getString("periodo");
				int qtdPessoas = Integer.parseInt(rs.getString("qtdPessoas"));
				Calendar dtEvento = Calendar.getInstance(); 
				dtEvento.setTime(rs.getDate("dtEvento"));
				int idCliente = Integer.parseInt(rs.getString("idCliente"));
				ClienteBean cliente = ClienteController.getClientePorId(idCliente);
				int idCardapio = Integer.parseInt(rs.getString("idCardapio"));
				CardapioBean cardapio = CardapioDAO.getCardapioPorId(idCardapio);
				EventoBean evento = new EventoBean(nome, endereco, cep, cidade, status, periodo, "", "", "", qtdPessoas, dtEvento, cliente, cardapio);
				eventos.add(evento);
			}
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return eventos;
	}
	
	public static int getCountEventosPorData(Calendar data){
		MysqlConnect mysql = new MysqlConnect();
		Date dataString = StringUtil.calendarToSqlDate(data);
		ResultSet rs = mysql.select("EVENTO", "count(*) as count", "dtevento = '" + dataString + "'", "", "");
		try {
			while(rs.next()){
				int count = rs.getInt("count");
				return count;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}
	public static ArrayList<Object> pesquisarEvento(String nome, String cliente, String endereco, String dataInicio, String dataFim) {
		StringBuilder where = new StringBuilder();
		where.append("cliente.idcliente = evento.idcliente ");
		if (!nome.isEmpty()) {
			where.append("and evento.nome like " + "'%" + nome + "%'");
		}
		if (!endereco.isEmpty()) {
				where.append(" AND endereco like " + "'%" + endereco + "%'");
		}
		if (!cliente.isEmpty()) {
				where.append(" AND cliente.nome like " + "'%" + cliente + "%'");
		}
		if(!StringUtil.limpaData(dataInicio).trim().isEmpty() && !StringUtil.limpaData(dataFim).trim().isEmpty()){
			where.append(" and dtevento between '" + StringUtil.stringToSqlDate(dataInicio) + "' and '" + StringUtil.stringToSqlDate(dataFim) + "'");
		}
		
		MysqlConnect mysql = new MysqlConnect();

		ResultSet rs = mysql.join("EVENTO", "CLIENTE", "",
				where.toString(), " idevento", " situacao");
		ArrayList<EventoBean> eventos = new ArrayList<>();

		ArrayList<Object> tabelaEvento = new ArrayList<Object>();

		try {
			while(rs.next()){
				//tem que colocar o objeto inteiro
				int idevento = rs.getInt("idevento");
				String nomeEvento = rs.getString("nome");
				String enderecoEvento = rs.getString("endereco"); 
				String cidadeEvento = rs.getString("cidade");
				String statusEvento = rs.getString("situacao");
				String periodoEvento = rs.getString("periodo");
				Calendar dtEvento = Calendar.getInstance(); 
				dtEvento.setTime(rs.getDate("dtEvento"));
				int idCliente = Integer.parseInt(rs.getString("idCliente"));
				ClienteBean clienteEvento = ClienteController.getClientePorId(idCliente);
				EventoBean evento = new EventoBean(nomeEvento, enderecoEvento, "", cidadeEvento, statusEvento, periodoEvento, "", "", "", 0, dtEvento, clienteEvento, null);
				evento.setIdEvento(idevento);
				eventos.add(evento);
			}
			for (EventoBean e : eventos) {
				Object dados[] = new Object[] {
				e.getIdEvento() ,e.getCliente().getNome(),  e.getNome(), e.getEndereco(), e.getPeriodo(), e.getStatus(), StringUtil.calendarToString(e.getData())
				};
				tabelaEvento.add(dados);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return tabelaEvento;
	}
	public static EventoBean getEventoPorId(int id){
		MysqlConnect mysql = new MysqlConnect();
		ResultSet rs = mysql.select("EVENTO", "", "idevento = " + id, "", "");
		EventoBean evento = null;
		try {
			while(rs.next()){
				String nome = rs.getString("nome");
				int idCliente = Integer.parseInt(rs.getString("idCliente"));
				ClienteBean cliente = ClienteController.getClientePorId(idCliente);
				String endereco = rs.getString("endereco");
				String cep = rs.getString("cep");
				String cidade = rs.getString("cidade");
				String status = rs.getString("situacao");
				String periodo = rs.getString("periodo");
				int qtdPessoas = rs.getInt("qtdPessoas");
				Calendar dtEvento = Calendar.getInstance(); 
				dtEvento.setTime(rs.getDate("dtEvento"));
				int idCardapio = rs.getInt("idCardapio");
				CardapioBean cardapio = CardapioDAO.getCardapioPorId(idCardapio);
				String complemento = rs.getString("complemento");
				String obs = rs.getString("obs");
				String motivo = rs.getString("motivo");
				evento = new EventoBean(nome, endereco, cep, cidade, status, periodo, complemento, obs, motivo, qtdPessoas, dtEvento, cliente, cardapio);
				evento.setIdEvento(id);
				
			}
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return evento;
	}
	public static boolean updateEvento(EventoBean evento){
		MysqlConnect mysql = new MysqlConnect();
		StringBuilder str = new StringBuilder();
		str.append("qtdpessoas = " + evento.getQtdPessoas());
		str.append(",");
		str.append("dtevento = '" + StringUtil.calendarToSqlDate(evento.getData()) + "'");
		str.append(",");
		str.append("obs = " + StringUtil.quotedStr(evento.getObs()));
		str.append(",");
		str.append("situacao = " + StringUtil.quotedStr(evento.getStatus()));
		str.append(",");
		str.append("periodo = " + StringUtil.quotedStr(evento.getPeriodo()));
		str.append(",");
		str.append("endereco = " + StringUtil.quotedStr(evento.getEndereco()));
		str.append(",");
		str.append("cidade = " + StringUtil.quotedStr(evento.getCidade()));
		str.append(",");
		str.append("cep = " + StringUtil.quotedStr(evento.getCep()));
		str.append(",");
		str.append("complemento = " + StringUtil.quotedStr(evento.getComplemento()));
		str.append(",");
		str.append("nome = " + StringUtil.quotedStr(evento.getNome()));
		str.append(",");
		str.append("motivo = " + StringUtil.quotedStr(evento.getMotivo()));
		str.append(",");
		str.append("idcardapio = " + evento.getCardapio().getIdCardapio());
		return mysql.update("evento", str.toString(), "idevento = " + evento.getIdEvento());
	}
}
